// 法一：卡特兰数
// #include <iostream>
// using namespace std;
// #define int long long 
// int x;
// const int N = 20;
// int a[N];
// signed main() {
//     cin >> x;
//     a[0] = 1;
//     for(int i = 1; i <= x; i++) {
//         a[i] = ((2 * (2 * i - 1)) * a[i - 1]) / (i + 1);
//     }
//     cout << a[x];
//     return 0;
// }


// 法二；使用动态规划
#include <iostream>
using namespace std;
const int N = 20;
int a[N][N]; // 前面是i, 后面是j, i：表示的是输出序列中的元素个数，j：表示的是栈中元素的个数, a[i][j]表示这种可能的个数
int x;
int main() {
    cin >> x;
    for(int i = 0; i <= x; i++) {
        a[0][i] = 1;
    }
    for(int i = 1; i <= x; i++) {
        for(int j = 0; j <=x; j++) {
            if(j) {
                a[i][j] = a[i][j - 1] + a[i - 1][j + 1];
            }else {
                a[i][j] = a[i - 1][j + 1];
            }
        }
    }
    cout << a[x][0] << endl;
    return 0;
}